package com.dev.view.handler;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

import com.dev.R;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;

/**
 * 在 Android 中，只有主线程才能操作 UI，但是主线程不能进行耗时操作，否则会阻塞线程，
 * 产生 ANR 异常，所以常常把耗时操作放到其它子线程进行。如果在子线程中需要更新 UI，
 * 一般是通过 Handler 发送消息，主线程接受消息并且进行相应的逻辑处理。
 * http://www.codeceo.com/article/android-handler-learn.html
 */
@EActivity(R.layout.activity_handler)
public class HandlerActivity extends AppCompatActivity {

    @ViewById(R.id.tv_handler)
    TextView tv_handler;

    private boolean stop;


    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            tv_handler.setText("UI更新成功！");
            stop = true;
        }
    };


    @Click(R.id.btn_start)
    public void btnClick() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (!stop) {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.obtainMessage(1).sendToTarget();
                }
            }
        }).start();
    }

}
